package com.saturday.data.scope.annotation;

import com.saturday.data.scope.constants.SqlFieldCompareEnum;
import com.saturday.data.scope.constants.SqlWhereRelationEnum;

import java.lang.annotation.*;

/**
 * 权限注解
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DataColumn {

    /**
     * 数据权限规则标识，具体可使用常量类{@link com.saturday.data.scope.constants.DataScopeRuleConstants},也可以根据扩展常量内容
     *
     * @return 该值具体用于下述方法
     * @see com.saturday.data.scope.AbstractDataPermissionHandler#isExecute(String)
     */
    String dataRuleKey();

    /**
     * 表别名
     *
     * @return
     */
    String alias() default "";


    /**
     * 权限字段名-数据库字段
     *
     *  例如：@DataColumn(alias = "t", names = {"a", "b"}) 当a、b属性来自于同一个表别名下的时候，无需写两个@DataColumn注解而是向上面一样
     *
     * @return
     */
    String[] names();

    /**
     * 权限字段关系， 理论上下值应该与names数量保持一致
     *
     * @return
     */
    SqlWhereRelationEnum[] fieldSqlWhereRelation() default SqlWhereRelationEnum.AND;

    /**
     * 权限字段与值比对关系， 理论上下值应该与names数量保持一致
     *
     * @return
     */
    SqlFieldCompareEnum[] sqlFieldCompareEnum() default SqlFieldCompareEnum.EQUALS;
}
